#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 转换32个16进制字符为128位数值，存入data数组
void read_bram_data(const char* filename, unsigned long long data[1024][2]) {
    FILE* fp = fopen(filename, "r");
    if (!fp) {
        fprintf(stderr, "Error: 无法打开文件 %s\n", filename);
        return;
    }

    char hex_str[33] = {0};  // 存储32个字符（加终止符）
    int count = 0;           // 有效字符计数器
    int idx = 0;             // 数组索引
    int c;

    while ((c = fgetc(fp)) != EOF && idx < 1024) {
        // 跳过逗号和换行符
        if (c == ',' || c == '\n' || c == '\r') continue;

        // 收集字符（最多32个）
        if (count < 32) hex_str[count++] = (char)c;

        // 转换并存储128位数据（前16字符为高位，后16为低位）
        if (count == 32) {
            hex_str[32] = '\0';
            unsigned long long high, low;
            sscanf(hex_str, "%16llx%16llx", &high, &low);  // 解析高低位
            data[idx][0] = low;  // 低位64位
            data[idx][1] = high; // 高位64位
            count = 0;
            idx++;
        }
    }

    fclose(fp);
    if (idx != 1024) {
        fprintf(stderr, "Warning: 仅读取 %d 个元素（预期1024个）\n", idx);
    }
}